<?
// Инициализация теста

function atest_mod_objr($level)
{   // Возврощает списко тестовых функций
    switch ($level)
    {
        case 'unit':
            // Функции модульного тестирования
            // (изолированный функционал)
            return array();
        break;
        case 'func':
            // Функции функционального тестирования
            // Приемочнгое тестирование
            return array('atest_mod_objr_func_t1');
        break;

    }
}



function atest_mod_objr_func_t1()
{   // Тестируем работу стандартных вызовов

    $ok = true;
	$pretime = $start = microtime(true);
    echo '<pre>';
    echo "\nРегистрируем объекты с id=122 и id=123";
    $id1 = objr_save_object(122,'atest_class_test1','objr','Тестовый класс 1','atest_categ_test1','Тестовая категория 1');
    if ($id1 !== ($id12=objr_save_object(122,'atest_class_test1','objr','Тестовый класс 1','atest_categ_test1','Тестовая категория 1')))
    {
        $ok = false;
	    echo "\nОшибка: id объектов не совпадает: {$id1}!={$id12}\n";
    }
    $id2 = objr_save_object(123,'atest_class_test2','objr','Тестовый класс 2','atest_categ_test1','Тестовая категория 1 (в классе 2)');
    echo "\n".round(-$pretime+($pretime = microtime(true)),6);
    
    // Получаем id классов (они должны были быть созданы при сохранении объектов)
    echo "\nЗапрашиваем из БД id созданных классов";
    $class1 = objr_save_class('atest_class_test1','objr');
    $class2 = objr_save_class('atest_class_test2','objr');
    if ($class1!=objr_save_class('atest_class_test1','objr'))
    {
        $ok = false;
	    echo "\nОшибка: id классов с одинаковым именем должны совпадать: {$class1}\n";
    }
    if ($class1==$class2)
    {
        $ok = false;
	    echo "\nОшибка: id классов с разным именем не должны совпадать: {$class1}\n";
    }
    echo "\n".round(-$pretime+($pretime = microtime(true)),6);

    // Получаем id категорий (они должны были быть созданы при сохранении объектов)
    echo "\nЗапрашиваем из БД id категорий, созданных вместе с объектами";
    $class1_categ1 = objr_save_category($class1,'atest_categ_test1');
    $class2_categ1 = objr_save_category($class2,'atest_categ_test1');
    if (objr_save_category($class2,'atest_categ_test1')!=$class2_categ1)
    {
        $ok = false;
	    echo "\nОшибка: id категорий с одинаковым именем и в одинаковых классах должны совпадать: {$class1_categ1}\n";
    }
    if ($class1_categ1==$class2_categ1)
    {
        $ok = false;
	    echo "\nОшибка: id категорий с разным именем или в разных классах не должны совпадать: {$class1_categ1}\n";
    }
    echo "\n".round(-$pretime+($pretime = microtime(true)),6);
    
    echo "\nНазначаем права доступа группе к объекту";
    $group_id  = access_save_groupcode('guests',null);
    $obj_id  = objr_save_object(122,'atest_class_test1','objr');
    objr_acc_save_group2obj($obj_id,$group_id,$perm_set = array('read'=>1,'view'=>1));
    $perm_list = access_const_permissions();
    foreach ($perm_list as $p_name)
    {
        if(objr_acc_isaccess_user2obj(122,'atest_class_test1','objr',$p_name,2)
            AND !isset($perm_set[$p_name])
            AND @!$perm_set[$p_name])
        {
	        $ok = false;
	        echo "\nОшибка5: возвращены неправильные права доступа: администратору запрещено {$p_name}\n";
        }    
    }
    echo "\n".round(-$pretime+($pretime = microtime(true)),6);
    
    echo "\nУдаляем объект 122 и все упоминания о нем";
    access_delete_object(122,'atest_class_test1','objr');

    // XXX Хорошо бы сделать проверки на остальные методы присвоения и проверки прав
    
    echo '</pre>';
    return $ok;
}
?>